// pages/snapUpDetail/snapUpDetail.js
var http = require('../../utils/http.js');
var util = require('../../utils/util.js');
Page({

  /**
   * 页面的初始数据
   */
  data: {
    hideModal: true,
    seckillid: 0,
    seckilldet: {},
    countdown: "", // 秒杀倒计时
    countDownListTimeout: null,
    countdownlist: [], // 秒杀倒计时列表
    originalPrice: 0,
    skuList: [],
    skuGroup: {},
    defaultSku: undefined,
    selectedProp: [],
    selectedPropObj: {},
    propKeys: [],
    allProperties: [],
    seckillPrice: 0,
    prodNum: 1,
    maxNum: 1,
    orderPath: '',
    seckillTotalStocks: 1, //秒杀活动剩余库存
    findSku: true,
    isAuthInfo: true,
    showBacktop: false, //回到顶部显隐
  },
  // 获取秒杀商品详情
  getskdet(isFirst) {
    const {
      seckillid
    } = this.data

    // 请求详情数据

    http.request({
      url: "/seckill/prod?seckillId=" + seckillid,
      method: "GET",
      callBack: (res) => {
        console.log(res)
        var _this = this
        let endTimeList = [];
        var objs = {}
        objs.eTime = res.seckill.endTime
        objs.sTime = res.seckill.startTime
        objs.countType = null //1表示秒杀活动正在进行,0表示秒杀活动未开始
        endTimeList.push(objs)
        _this.setData({
          seckillTotalStocks: res.seckill.seckillTotalStocks,
          seckilldet: res,
          countdownlist: endTimeList,
          skuList: res.skuList,
          seckillPrice: res.seckill.seckillPrice,
          maxNum: res.seckill.maxNum,
          originalPrice: res.price,
          content: util.formatHtml(res.content)
        })
        if(isFirst) _this.groupSkuProp(); //组装sku
        _this.countdown()
      }
    })
  },

  // 倒计时
  countdown() {
    // 获取当前时间，同时得到活动结束时间数组
    let newTime = new Date().getTime();
    let endTimeList = this.data.countdownlist;
    let countDownArr = [];
    // 对结束时间进行处理渲染到页面
    endTimeList.forEach(o => {
      if (newTime - util.dateToTimestamp(o.sTime) > 0) {
        let endTime = util.dateToTimestamp(o.eTime);
        let obj = null;
        // 如果活动未结束，对时间进行处理
        if (endTime - newTime > 0) {
          let time = (endTime - newTime) / 1000;
          // 获取天、时、分、秒
          let day = parseInt(time / (60 * 60 * 24));
          let hou = parseInt(time % (60 * 60 * 24) / 3600);
          let min = parseInt(time % (60 * 60 * 24) % 3600 / 60);
          let sec = parseInt(time % (60 * 60 * 24) % 3600 % 60);
          obj = {
            day: `${this.timeFormat(day)} 天`,
            hou: `${this.timeFormat(hou)} 时`,
            min: `${this.timeFormat(min)} 分`,
            sec: `${this.timeFormat(sec)} 秒`,
            type: 1 // 表示秒杀正在进行
          }
        }
        // 活动已结束
        else {
          obj = {
            day: '00',
            hou: '00',
            min: '00',
            sec: '00'
          }
        }
        countDownArr.push(obj);
      }
      // 活动未开始
      else {
        let startTime = util.dateToTimestamp(o.sTime);
        let time = (startTime - newTime) / 1000;
        let obj = null;
        // 获取天、时、分、秒
        let day = parseInt(time / (60 * 60 * 24));
        let hou = parseInt(time % (60 * 60 * 24) / 3600);
        let min = parseInt(time % (60 * 60 * 24) % 3600 / 60);
        let sec = parseInt(time % (60 * 60 * 24) % 3600 % 60);
        obj = {
          day: `${this.timeFormat(day)} 天`,
          hou: `${this.timeFormat(hou)} 时`,
          min: `${this.timeFormat(min)} 分`,
          sec: `${this.timeFormat(sec)} 秒`,
          type: 0 // 表示秒杀还没开始
        }
        countDownArr.push(obj);
      }

    })
    // 渲染，然后每隔一秒执行一次倒计时函数
    this.setData({
      countDownList: countDownArr,
      countDownListTimeout: setTimeout(this.countdown, 1000)
    })
  },

  // 小于10的格式化函数
  timeFormat(times) {
    return times < 10 ? '0' + times : times;
  },


  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    const {
      seckillid
    } = options
    this.setData({
      seckillid
    })
    this.getskdet(true)

  },

   /**
   * 回到顶部
   */
  backToTop: function () {
    this.setData({
      scrollTop: 0
    })
  },
  /**
   * 监听页面滚动
   */
  onPageScroll: function (e) {
    if (e.detail.scrollTop > 80) {
      this.setData({
        showBacktop: true
      })
    } else if (e.detail.scrollTop < 80) {
      this.setData({
        showBacktop: false
      })
    }
  },

  //根据sku的属性 分组
  groupSkuProp: function() {
    var skuList = this.data.skuList;
    if (skuList.length == 1 && skuList[0].properties == "") {
      this.setData({
        defaultSku: skuList[0]
      });
      return;
    }
    var skuGroup = {};
    var allProperties = [];
    var propKeys = [];
    for (var i = 0; i < skuList.length; i++) {
      var defaultSku = this.data.defaultSku;
      var isDefault = false;
      if (!defaultSku && skuList[i].seckillPrice == this.data.seckillPrice) { //找到和商品价格一样的那个SKU，作为默认选中的SKU
        defaultSku = skuList[i];
        isDefault = true;
        this.setData({
          defaultSku: defaultSku
        });
      }
      var properties = skuList[i].properties; //版本:公开版;颜色:金色;内存:64GB
      allProperties.push(properties);
      var propList = properties.split(";"); // ["版本:公开版","颜色:金色","内存:64GB"]

      var selectedPropObj = this.data.selectedPropObj;
      for (var j = 0; j < propList.length; j++) {

        var propval = propList[j].split(":"); //["版本","公开版"]
        var props = skuGroup[propval[0]]; //先取出 版本对应的值数组

        //如果当前是默认选中的sku，把对应的属性值 组装到selectedProp
        if (isDefault) {
          propKeys.push(propval[0]);
          selectedPropObj[propval[0]] = propval[1];
        }

        if (props == undefined) {
          props = []; //假设还没有版本，新建个新的空数组
          props.push(propval[1]); //把 "公开版" 放进空数组
        } else {
          if (!this.array_contain(props, propval[1])) { //如果数组里面没有"公开版"
            props.push(propval[1]); //把 "公开版" 放进数组
          }
        }
        skuGroup[propval[0]] = props; //最后把数据 放回版本对应的值
      }
      this.setData({
        selectedPropObj: selectedPropObj,
        propKeys: propKeys
      });

    }
    this.parseSelectedObjToVals();
    this.setData({
      skuGroup: skuGroup,
      allProperties: allProperties
    });

  },

  //将已选的 {key:val,key2:val2}转换成 [val,val2]
  parseSelectedObjToVals: function() {
    var selectedPropObj = this.data.selectedPropObj;
    var selectedProperties = "";
    var selectedProp = [];
    for (var key in selectedPropObj) {
      selectedProp.push(selectedPropObj[key]);
      selectedProperties += key + ":" + selectedPropObj[key] + ";";
    }
    selectedProperties = selectedProperties.substring(0, selectedProperties.length - 1);

    var findSku = false;
    this.setData({
      selectedProp: selectedProp
    });
    for (var i = 0; i < this.data.skuList.length; i++) {
      if (this.data.skuList[i].properties == selectedProperties) {
        findSku = true;
        this.setData({
          defaultSku: this.data.skuList[i]
        });
        break;
      }
    }
    this.setData({
      findSku: findSku
    });
  },

  //点击选择规格
  toChooseItem: function(e) {
    var ok = e.currentTarget.dataset.ok;
    if (ok == 0) {
      return;
    }
    var val = e.currentTarget.dataset.val;
    var key = e.currentTarget.dataset.key;
    var selectedPropObj = this.data.selectedPropObj;
    selectedPropObj[key] = val;
    this.setData({
      selectedPropObj: selectedPropObj
    });
    this.parseSelectedObjToVals();

  },

  //判断数组是否包含某对象
  array_contain: function(array, obj) {
    for (var i = 0; i < array.length; i++) {
      if (array[i] == obj) //如果要求数据类型也一致，这里可使用恒等号===
        return true;
    }
    return false;
  },


  /**
   * 减数量
   */
  onCountMinus: function() {
    var prodNum = this.data.prodNum;
    if (prodNum > 1) {
      this.setData({
        prodNum: prodNum - 1
      });
    }
  },

  /**
   * 加数量
   */
  onCountPlus: function() {
    this.getskdet() //调接口获取最新库存数据
    var prodNum = this.data.prodNum;
    var seckillTotalStocks = this.data.defaultSku.seckillStocks
    const {
      maxNum
    } = this.data
    if (maxNum == -1) { // 此秒杀不限购
      if (seckillTotalStocks > 1 && prodNum < seckillTotalStocks) {
        this.setData({
          prodNum: prodNum + 1
        });
      } else {
        wx.showToast({
          title: '库存不足',
          icon: 'none',
          duration: 1000,
          mask: true,
        })
      }

    } else if (seckillTotalStocks > 1 && prodNum < maxNum && prodNum < seckillTotalStocks) {
      this.setData({
        prodNum: prodNum + 1
      });
    } else {
      wx.showToast({
        title: '限购' + maxNum + '件',
        icon: 'none',
        duration: 1000,
        mask: true,
      })
    }
  },

  // 确认秒杀商品
  seckillconfirm() {
    if (!this.data.findSku) {
      return;
    }
    var secKillObj = {};
    secKillObj.addrId = 0;
    secKillObj.prodCount = this.data.prodNum;
    secKillObj.seckillSkuId = this.data.defaultSku.seckillSkuId;
    wx.setStorageSync("secKillObj", secKillObj);
    wx.navigateTo({
      url: '/pages/confirmOrder/confirmOrder',
    })
  },
  //  零售价购买
  toProdDetailsPage: function(e) {
    console.log(this.data.seckilldet.prodId)
    wx.navigateTo({
      url: '/pages/prod/prod?prodid=' + this.data.seckilldet.prodId,
    })
  },


  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function() {
    this.setData({
      hideModal: true
    })
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function() {
    clearTimeout(this.data.countDownListTimeout)
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function() {

  },

  /**
   * 显示遮罩层
   */
  showModal: function() {
    var that = this;
    // 检查是否授权
    util.checkAuthInfo(()=>{
      // 已经授权，可以直接调用 getUserInfo 获取头像昵称
      that.setData({
        isAuthInfo: true,
        hideModal: false
      });
      var animation = wx.createAnimation({
        duration: 600, //动画的持续时间 默认400ms 数值越大，动画越慢 数值越小，动画越快 
        timingFunction: 'ease', //动画的效果 默认值是linear 
      })
      that.animation = animation
      setTimeout(function() {
        that.fadeIn(); //调用显示动画
      }, 100)
    })

  },
  
  /**
   * 获取用户信息
   */
  onGotUserInfo: function (e) {
    if (e.detail.errMsg != "getUserInfo:fail auth deny") {
      this.setData({
        isAuthInfo: true
      });
      http.updateUserInfo();
    }
  },


  /**
   * 隐藏遮罩层
   */
  hideModal: function() {
    var that = this;
    var animation = wx.createAnimation({
      duration: 800, //动画的持续时间 默认400ms 数值越大，动画越慢 数值越小，动画越快 
      timingFunction: 'ease', //动画的效果 默认值是linear
    })
    this.animation = animation
    that.fadeDown(); //调用隐藏动画
    setTimeout(function() {
      that.setData({
        hideModal: true
      })
    }, 720) //先执行下滑动画，再隐藏模块
  },


  /**
   * 动画集
   */
  fadeIn: function() {
    this.animation.translateY(0).step()
    this.setData({
      animationData: this.animation.export() //动画实例的export方法导出动画数据传递给组件的animation属性
    })
  },

  fadeDown: function() {
    this.animation.translateY(300).step()
    this.setData({
      animationData: this.animation.export(),
    })
  },

  /**
   * 跳转到首页
   */
  toHomePage: function() {
    wx.switchTab({
      url: '/pages/index/index',
    })
  },

  /**
   * 跳转到购物车
   */
  toCartPage: function() {
    wx.switchTab({
      url: '/pages/basket/basket',
    })
  },
})